package org.eiahe.hr.performance.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.eiahe.hr.performance.domain.PerformancePositionIndicator;
import org.eiahe.hr.performance.domain.bo.PerformancePositionIndicatorBo;
import org.eiahe.hr.performance.domain.bo.PerformancePositionIndicatorQueryBo;
import org.eiahe.hr.performance.domain.vo.PerformancePositionIndicatorVo;
import org.ehe.common.mybatis.core.page.PageQuery;
import org.ehe.common.mybatis.core.page.TableDataInfo;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;

/**
 * 岗位指标关联Service接口
 *
 * @author zhangnn
 */
public interface IPerformancePositionIndicatorService extends IService<PerformancePositionIndicator> {

    /**
     * 查询岗位指标关联
     *
     * @param id 岗位指标关联ID
     * @return 岗位指标关联
     */
    PerformancePositionIndicatorVo queryById(Long id);

    /**
     * 根据查询条件分页查询岗位指标关联VO列表
     *
     * @param queryBo   查询条件
     * @param pageQuery 分页参数
     * @return 岗位指标关联VO分页列表
     */
    TableDataInfo<PerformancePositionIndicatorVo> queryPageListVoByCondition(
            PerformancePositionIndicatorQueryBo queryBo,
            PageQuery pageQuery);

    /**
     * 查询岗位指标树状结构
     *
     * @param positionId 岗位ID
     * @return 岗位指标树状结构
     */
    List<PerformancePositionIndicatorVo> getPositionIndicatorTree(Long positionId);

    /**
     * 获取岗位指标的完整层级结构
     * 
     * @param positionId 岗位ID
     * @return 指标树状结构
     */
    List<PerformancePositionIndicatorVo> getFullPositionIndicatorTree(Long positionId);

    /**
     * 获取岗位所有直接关联的指标（不包括继承的子指标）
     * 
     * @param positionId 岗位ID
     * @return 指标列表
     */
    List<PerformancePositionIndicator> getDirectPositionIndicators(Long positionId);

    /**
     * 获取岗位指标权重
     * 
     * @param positionId  岗位ID
     * @param indicatorId 指标ID
     * @return 权重值
     */
    BigDecimal getPositionIndicatorWeight(Long positionId, Long indicatorId);

    /**
     * 计算加权得分
     * 
     * @param score  原始分数
     * @param weight 权重
     * @return 加权得分
     */
    BigDecimal calculateWeightedScore(BigDecimal score, BigDecimal weight);

    /**
     * 新增岗位指标关联
     *
     * @param indicator 岗位指标关联
     * @return 是否成功
     */
    Boolean insertByBo(PerformancePositionIndicatorBo indicator);

    /**
     * 修改岗位指标关联
     *
     * @param indicator 岗位指标关联
     * @return 是否成功
     */
    Boolean updateByBo(PerformancePositionIndicatorBo indicator);

    /**
     * 校验并批量删除岗位指标关联信息
     *
     * @param ids     岗位指标关联ID集合
     * @param isValid 是否校验
     * @return 是否成功
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}